package com.wf.classRoomTest.staticcc;

/**
 * @Author fengqq
 * @Description 静态代理
 * @Date 2024/6/19  15:20
 *
 * 静态代理：
 * 1.代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来 调用目标对象的方法。
 * 2.优点：在不修改原有的目标对象的基础上，通过代理对象对目标方法来扩展
 * 3.缺点：
 *      1.若采用静态代理模式，代理类会急剧膨胀
 *      2.一旦在接口中有新增抽象方法，无论是目标类还是代理类都需要新增方法，扩展性没有很好
 *
 */
public class StaticUserSerivceProxy implements IUserService{

    //目标对象
    private IUserService userService;
    public StaticUserSerivceProxy(IUserService userService) {
        this.userService = userService;
    }

    @Override
    public boolean login(String username, String password) {
        System.out.println("开始日志记录，追踪的方法是login,username="+username);
        long start = System.currentTimeMillis();

        //调用目标对象的相同方法 --核心业务
        boolean result = userService.login(username, password);

        long end = System.currentTimeMillis();
        System.out.println("结束日志追踪，，追踪的方法是login,此方法耗时="+(end-start)/1000.0+"s");
        return result;
    }

    @Override
    public boolean register(String username, String password, int age) {
        System.out.println("开始日志记录，追踪的方法是login,username="+username);
        long start = System.currentTimeMillis();

        //调用目标对象的相同方法 --核心业务
        boolean result = userService.register(username, password, age);

        long end = System.currentTimeMillis();
        System.out.println("结束日志追踪，，追踪的方法是login,此方法耗时="+(end-start)/1000.0+"s");
        return result;
    }

}
